package Servicios;

import DAO.*;
import Dominio.*;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class GestorDeAsignaturasAlumno extends HttpServlet{

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) {
        processRequest(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) {
        processRequest(request, response);
    }

    protected void processRequest(HttpServletRequest request, HttpServletResponse response) {
        guardarDatosAsignaturas(request, response);
    }

    private void guardarDatosAsignaturas(HttpServletRequest request, HttpServletResponse response){
        PrintWriter out=null;
        try {
            response.setContentType("text/html;charset=UTF-8");
            out = response.getWriter();
        
            String nombreDeUsuario = (String)request.getSession().getAttribute("nombreUsuario");
            DAOInformacionAlumno daoIA = new DAOInformacionAlumno();
            int claveInfoAlumno = daoIA.obtenerClaveInfoAlumno(nombreDeUsuario);
            DAORelacionAlumnoProgramaEducativo daoR = new DAORelacionAlumnoProgramaEducativo();
            ProgramaEducativo programaEducativo = (ProgramaEducativo)daoR.getProgramaEducativoAlumno(claveInfoAlumno);
            ArrayList<Semestre> semestres = programaEducativo.getReticula().getListaDeSemestres();
            DAOAsignaturasAlumno daoAA = new DAOAsignaturasAlumno();

            DAORelacionAlumnoProgramaEducativo daoAPE = new DAORelacionAlumnoProgramaEducativo();
            int claveRelacionAlumnoPE = daoAPE.obtenerClaveRelacion(claveInfoAlumno, programaEducativo.getCvePrograma());
            daoAPE.cerrarConexionARelacionAlumnoProgramaEducativo();

            for(int i = 0; i<semestres.size(); i++){
                int j;
                for(j=0; j<semestres.get(i).getListaDeAsignaturas().size(); j++){
                    String id = i + "/" + j;// "Numero de Semestre/Numero de Asignatura"
                    int claveAsignatura = semestres.get(i).getListaDeAsignaturas().get(j).getClave_asignatura();
                    AsignaturaAlumno asignatura = daoAA.obtenerAsignaturaAlumno(claveInfoAlumno, programaEducativo.getCvePrograma(), claveAsignatura, semestres.get(i).getClave_semestre());
                    int estado = Integer.parseInt(request.getParameter(id));

                    DAOAsignaturaReticula daoAR = new DAOAsignaturaReticula();
                    int claveAsignaturaReticula = daoAR.obtenerClaveAsignaturaSemestre(claveAsignatura, semestres.get(i).getClave_semestre());
                    daoAR.cerrarConexionAAsignaturaReticula();
                    if(asignatura!=null){
                        //Actualizamos
                        daoAA.actualizarAsignaturaAlumno(asignatura.getClaveAsignaturaAlumno(), claveRelacionAlumnoPE, claveAsignaturaReticula, estado);
                    } else {
                        //Agregamos
                        daoAA.registrarAsignaturaAlumno(claveRelacionAlumnoPE, claveAsignaturaReticula, estado);
                    }
                }
            }
            //Optativas
            DAOAsignaturasOptativasAlumno daoAOA = new DAOAsignaturasOptativasAlumno();
            ArrayList<AsignaturaOptativa> optativas = programaEducativo.getReticula().getAsignaturasOptativas();
            for(int i = 0; i<optativas.size(); i++){
                
                
                int claveAsignatura = optativas.get(i).getClave_asignatura();
                
                DAOOptativas daoAsignaturaOptativa = new DAOOptativas();                
                int claveAsignaturaOptativa = daoAsignaturaOptativa.obtenerClaveAsignaturaOptativa(claveAsignatura, programaEducativo.getCvePrograma());
                daoAsignaturaOptativa.cerrarConexion();
                
                String idOptativa = "op"+i;
                AsignaturaOptativaAlumno actual = daoAOA.obtenerAsignaturaAlumno(claveInfoAlumno, programaEducativo.getCvePrograma(), claveAsignaturaOptativa);
                int estadoO = Integer.parseInt(request.getParameter(idOptativa));
              
                DAOOptativas daoOptativas = new DAOOptativas();
                int claveOptativa = daoOptativas.obtenerClaveOptativa(claveAsignatura);
                daoOptativas.cerrarConexion();
                
                if(actual!=null){
                    //Actualizamos
                    daoAOA.actualizarAsignaturaAlumno(actual.getClaveAsignaturaOptativaAlumno(), claveRelacionAlumnoPE, claveOptativa, estadoO);
                } else {
                    //Agregamos
                    daoAOA.registrarAsignaturaOptativaAlumno(claveRelacionAlumnoPE, claveOptativa, estadoO);
                }
            }
            HttpSession sesion = request.getSession();
            sesion.setAttribute("nombreDeUsuario", null); 
            
            out.println("Asignatura Registrada con &eacute;xito");
        }
        catch (IOException e) {
            out.println(e.getMessage());
        }
        catch(NumberFormatException ex) {
            out.println(ex.getMessage());
        } finally {
            out.close();
        }
    }
}
